package cn.lzy.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * @Description  模拟 user 控制器
 * @Author lzy
 * @Date 2023/12/6 14:21
 * @Version
 *
 * 【知识要点】
 * 属性注入的三种方式：
 *  1. 属性注入
 *  2. setter 注入
 *  3. 构造方法注入
 **/
@Controller
public class UserController {

//    @Autowired    // 属性注入方式一
    UserService userService;

    /**
     * 该种方式属于【构造器注入】，
     * 当Spring容器初始化 UserController 的时候，会调用这个构造方法，结果是这个构造方法需要 UserService 参数，
     * 此时 Spring 容器就会去容器中查找是否存在 UserService 实例，如果存在，则直接使用该实例。
     *
     */
    @Autowired      // 属性注入方式二：构造器注入（如果同时存在多个构造方法时，则可以通过 @Autowired 注解去指定到底使用哪一个构造方法：）
    public UserController(UserService userService) {
        this.userService = userService;
    }

    public UserController() {
    }


//    // 属性注入方式三：setter方法注入
//    @Autowired
//    public void setUserService(UserService userService) {
//        this.userService = userService;
//    }

    public String hello() {
        return userService.hello();
    }
}
